home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / LINUX / SHM.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  2KB  |  80 lines

  1. #ifndef _LINUX_SHM_H_
  2. #define _LINUX_SHM_H_
  3.  
  4. #include <linux/ipc.h>
  5.  
  6. #include <asm/shmparam.h>
  7.  
  8. struct shmid_ds {
  9.     struct ipc_perm        shm_perm;    /* operation perms */
  10.     int            shm_segsz;    /* size of segment (bytes) */
  11.     __kernel_time_t        shm_atime;    /* last attach time */
  12.     __kernel_time_t        shm_dtime;    /* last detach time */
  13.     __kernel_time_t        shm_ctime;    /* last change time */
  14.     __kernel_ipc_pid_t    shm_cpid;    /* pid of creator */
  15.     __kernel_ipc_pid_t    shm_lpid;    /* pid of last operator */
  16.     unsigned short        shm_nattch;    /* no. of current attaches */
  17.     unsigned short         shm_unused;    /* compatibility */
  18.     void             *shm_unused2;    /* ditto - used by DIPC */
  19.     void            *shm_unused3;    /* unused */
  20. };
  21.  
  22. struct shmid_kernel
  23. {    
  24.     struct shmid_ds        u;
  25.     /* the following are private */
  26.     unsigned long        shm_npages;    /* size of segment (pages) */
  27.     unsigned long        *shm_pages;    /* array of ptrs to frames -> SHMMAX */ 
  28.     struct vm_area_struct    *attaches;    /* descriptors for attaches */
  29. };
  30.  
  31. /* permission flag for shmget */
  32. #define SHM_R        0400    /* or S_IRUGO from <linux/stat.h> */
  33. #define SHM_W        0200    /* or S_IWUGO from <linux/stat.h> */
  34.  
  35. /* mode for attach */
  36. #define    SHM_RDONLY    010000    /* read-only access */
  37. #define    SHM_RND        020000    /* round attach address to SHMLBA boundary */
  38. #define    SHM_REMAP    040000    /* take-over region on attach */
  39.  
  40. /* super user shmctl commands */
  41. #define SHM_LOCK     11
  42. #define SHM_UNLOCK     12
  43.  
  44. /* ipcs ctl commands */
  45. #define SHM_STAT     13
  46. #define SHM_INFO     14
  47.  
  48. struct    shminfo {
  49.     int shmmax;
  50.     int shmmin;
  51.     int shmmni;
  52.     int shmseg;
  53.     int shmall;
  54. };
  55.  
  56. struct shm_info {
  57.     int used_ids;
  58.     unsigned long shm_tot;    /* total allocated shm */
  59.     unsigned long shm_rss;    /* total resident shm */
  60.     unsigned long shm_swp;    /* total swapped shm */
  61.     unsigned long swap_attempts;
  62.     unsigned long swap_successes;
  63. };
  64.  
  65. #ifdef __KERNEL__
  66.  
  67. /* shm_mode upper byte flags */
  68. #define    SHM_DEST    01000    /* segment will be destroyed on last detach */
  69. #define SHM_LOCKED      02000   /* segment will not be swapped */
  70.  
  71. asmlinkage int sys_shmget (key_t key, int size, int flag);
  72. asmlinkage int sys_shmat (int shmid, char *shmaddr, int shmflg, unsigned long *addr);
  73. asmlinkage int sys_shmdt (char *shmaddr);
  74. asmlinkage int sys_shmctl (int shmid, int cmd, struct shmid_ds *buf);
  75. extern void shm_unuse(unsigned long entry, unsigned long page);
  76.  
  77. #endif /* __KERNEL__ */
  78.  
  79. #endif /* _LINUX_SHM_H_ */
  80.